package iserver

import "broker/struct/model"

type IServer interface {
	// Start 启动服务器
	Start()

	// Stop 停止服务器
	Stop()

	// Serve 运行服务器
	Serve()

	// GetRouters /获取路由表
	GetRouters() IRouterTable

	// GetConnManager 获取连接管理器
	GetConnManager() IConnManager

	// GetTopicManager 获取主题管理器
	GetTopicManager() ITopicManager

	/*
	  连接Hook
	*/
	// SetOnConnStart 注册OnConnStart
	SetOnConnStart(onConnStart func(connection IConnection))

	// SetOnConnStop 注册onConnStop
	SetOnConnStop(onConnStart func(connection IConnection))

	SetOnPublish(onPublish func(connection IConnection,message model.PublishMessage))

	// CallOnConnStart 调用连接启动的Hook方法
	CallOnConnStart(connection IConnection)

	// CallOnConnStop 调用连接关闭的Hook方法
	CallOnConnStop(connection IConnection)

	CallOnPublish(connection IConnection,message model.PublishMessage)
}
